#!/usr/bin/env python
# -*- coding: UTF8 -*-

from GladeConnect import GladeConnect
import completion
import SimpleTree
import ifd
from psycopg2 import connect
import gtk
import dialogos
import debugwindow
import sys
from strSQL.basicas import strSelectTipoFicha
import treetohtml

(CODIGO,
 DESCRIPCION_TIPO_FICHA) = range(2)

class wnTipoFicha(GladeConnect):
    
    def __init__(self, conexion=None, padre=None, root="wnTipoFicha"):
        GladeConnect.__init__(self,"glade/wnTipoFicha.glade", root)
        self.cnx = conexion
        self.cursor = self.cnx.cursor()
        self.padre = padre
        if self.padre is None:
            self.wnTipoFicha.maximize()
            self.frm_padre = self.wnTipoFicha
        else:
            self.frm_padre = padre.frm_padre
            
        self.crea_columnas()
        
        self.carga_datos()
        
    def crea_columnas(self):
        columnas = []
        columnas.append([CODIGO,"Código",int])
        columnas.append([DESCRIPCION_TIPO_FICHA,"Descripción Tipo Ficha",str])
        
        self.modelo = gtk.ListStore(int,str)
        SimpleTree.GenColsByModel(self.modelo, columnas, self.treeTipoFicha)
        self.col_data = [x[0] for x in columnas]
        
    def on_btnImprimir_clicked(self, btn=None):
        t = treetohtml.TreeToHTML(self.treeTipoFicha,"Tipo de Fichas", self.col_data)
        t.show()
        
    def carga_datos(self):
        self.modelo = ifd.ListStoreFromSQL(self.cnx,strSelectTipoFicha)
        self.treeTipoFicha.set_model(self.modelo)
        
    def on_treeTipoFicha_row_activated(self, tree=None, path=None, col=None):
        self.on_btnPropiedades_clicked()
        
    def on_btnAnadir_clicked(self, btn=None):
        dlg = dlgTipoFicha(self.cnx, self.frm_padre, False)
        response = dlg.dlgTipoFicha.run()
        dlg.editando = False
        if response == gtk.RESPONSE_OK:
            self.entDescripcion = dlg.entDescripcion.get_text()
        self.carga_datos()
        
    def on_btnQuitar_clicked(self, btn=None):
        model, it = self.treeTipoFicha.get_selection().get_selected()
        if model is None or it is None:
            return
        descripcion = model.get_value(it, DESCRIPCION_TIPO_FICHA)
        if dialogos.yesno("¿Desea eliminar el tipo de ficha, <b>%s</b>? \n Esta Acción no se puede deshacer!!!"%descripcion, self.frm_padre) == gtk.RESPONSE_YES:
            llaves = {'descripcion_tipo_ficha': descripcion}
            sql = ifd.deleteFromDict("traza.tipo_ficha",llaves)
            try:
                self.cursor.execute(sql, llaves)
                model.remove(it)
            except:
                print sys.exc_info()[1]
                dialogos.error("<b>NO SE PUEDE ELIMINAR</b>\nEl Tipo Ficha <b>%s</b> se encuentra relacionado con una Ficha. "%descripcion)
            
    def on_btnPropiedades_clicked(self, btn=None):
        model, it = self.treeTipoFicha.get_selection().get_selected()
        if model is None or it is None:
            return
        dlg = dlgTipoFicha(self.cnx, self.frm_padre, False)
        dlg.entCodigo.set_text(model.get_value(it, CODIGO))
        dlg.entDescripcion.set_text(model.get_value(it, DESCRIPCION_TIPO_FICHA))
        dlg.editando = True
        response = dlg.dlgTipoFicha.run()
        if response == gtk.RESPONSE_OK:
            self.modelo.clear()
            self.carga_datos()
            
    def on_btnCerrar_clicked(self, btn=None):
        if self.padre is None:
            self.on_exit()
        else:
            self.padre.remove_tab("Tipo Ficha")
        
        
class dlgTipoFicha(GladeConnect):
    def __init__(self, conexion=None, padre=None, editando=False):
        GladeConnect.__init__(self, "glade/wnTipoFicha.glade", "dlgTipoFicha")
        self.dlgTipoFicha.show_all()
        self.cnx = conexion
        self.cursor = self.cnx.cursor()
        self.dlgTipoFicha.set_transient_for(padre)
        #self.dlgTipoFicha.set_size_request(600,120)
        self.editando = editando
        
        
    def on_btnAceptar_clicked(self, btn=None):
        if self.entDescripcion.get_text() == "":
            dialogos.error("El campo <b>Descripción Tipo Ficha</b> no puede estar vací­o")
            return
        
        campos = {}
        llaves = {}
        campos['descripcion_tipo_ficha']  = self.entDescripcion.get_text().upper()
        
        if not self.editando:
            sql = ifd.insertFromDict("traza.tipo_ficha", campos)
        else:
            llaves['codigo_tipo_ficha'] = self.entCodigo.get_text()
            sql, campos = ifd.updateFromDict("traza.tipo_ficha", campos, llaves)
            
        self.cursor.execute(sql, campos)
        self.dlgTipoFicha.hide()
        
    def on_btnCancelar_clicked(self, btn=None):
        self.dlgTipoFicha.hide()

if __name__ == "__main__":
    cnx = connect("dbname=vina")
    #cnx.autocommit()
    sys.excepthook = debugwindow.show
    w = wnTipoFicha (cnx)
    
    gtk.main()
